# kinds                                                               -*- sh -*-
#
# For documentation on this file format, please refer to
# src/theory/builtin/kinds.
#

theory THEORY_QUANTIFIERS ::cvc5::internal::theory::quantifiers::TheoryQuantifiers "theory/quantifiers/theory_quantifiers.h"
typechecker "theory/quantifiers/theory_quantifiers_type_rules.h"

properties check presolve

rewriter ::cvc5::internal::theory::quantifiers::QuantifiersRewriter "theory/quantifiers/quantifiers_rewriter.h"

operator FORALL 2:3 "universally quantified formula; first parameter is an BOUND_VAR_LIST, second is quantifier body, and an optional third parameter is an INST_PATTERN_LIST"

operator EXISTS 2:3 "existentially quantified formula; first parameter is an BOUND_VAR_LIST, second is quantifier body, and an optional third parameter is an INST_PATTERN_LIST"

variable INST_CONSTANT "instantiation constant"

variable ORACLE "oracle"

sort BOUND_VAR_LIST_TYPE \
    Cardinality::INTEGERS \
    not-well-founded \
    "the type of bound variable lists"

operator BOUND_VAR_LIST 1: "a list of bound variables (used to bind variables under a quantifier)"

sort INST_PATTERN_TYPE \
    Cardinality::INTEGERS \
    not-well-founded \
    "instantiation pattern type"

# Instantiation pattern, also called trigger.
# This node is used for specifying hints for quantifier instantiation.
# An instantiation pattern may have more than 1 child, in which case it specifies a multi-trigger.
operator INST_PATTERN 1: "instantiation pattern"
operator INST_NO_PATTERN 1 "instantiation no-pattern"
operator INST_ATTRIBUTE 1: "instantiation attribute"
operator INST_POOL 1: "instantiation pool"
operator INST_ADD_TO_POOL 2 "instantiation add to pool"
operator SKOLEM_ADD_TO_POOL 2 "skolemization add to pool"
# oracle formula generator is a pair (assumption generator, constraint generator)
operator ORACLE_FORMULA_GEN 2 "oracle interface"

sort INST_PATTERN_LIST_TYPE \
    Cardinality::INTEGERS \
    not-well-founded \
    "the type of instantiation pattern lists"

# a list of instantiation patterns
operator INST_PATTERN_LIST 1: "a list of instantiation patterns"

typerule FORALL ::cvc5::internal::theory::quantifiers::QuantifierTypeRule
typerule EXISTS ::cvc5::internal::theory::quantifiers::QuantifierTypeRule
typerule BOUND_VAR_LIST ::cvc5::internal::theory::quantifiers::QuantifierBoundVarListTypeRule
typerule INST_PATTERN_LIST ::cvc5::internal::theory::quantifiers::QuantifierInstPatternListTypeRule
typerule ORACLE_FORMULA_GEN ::cvc5::internal::theory::quantifiers::QuantifierOracleFormulaGenTypeRule

typerule INST_PATTERN ::cvc5::internal::theory::quantifiers::QuantifierInstPatternTypeRule
typerule INST_NO_PATTERN ::cvc5::internal::theory::quantifiers::QuantifierAnnotationTypeRule
typerule INST_ATTRIBUTE ::cvc5::internal::theory::quantifiers::QuantifierAnnotationTypeRule
typerule INST_POOL ::cvc5::internal::theory::quantifiers::QuantifierAnnotationTypeRule
typerule INST_ADD_TO_POOL ::cvc5::internal::theory::quantifiers::QuantifierAnnotationTypeRule
typerule SKOLEM_ADD_TO_POOL ::cvc5::internal::theory::quantifiers::QuantifierAnnotationTypeRule

endtheory
